직접 해보기

친구 마르코프에게 문자 보내기

100% 해석 가능한 다음 토큰 생성기

문자 보내기

예전에 친구들과 이런 게임을 한 적이 있었어요. 휴대폰을 들고 추천 다음 단어만 사용해서 친구에게 메시지를 만드는 거예요. 혹시 여러분도 해보셨나요?

여기 약간의 콘텐츠로 "학습된" 시뮬레이터가 있습니다. 한번 해보세요!

hey does anyone know how to fix the build
i think |

우리는 이것을 "나-봇"처럼 이야기했어요. 개인별 사용 패턴을 기반으로 단어를 추천한다는 걸 알았고, 개인화된 추천에서 우리 각자의 목소리를 볼 수 있었죠.

당시엔 그냥 신기한 기술이라고 넘겼어요. 알고리즘이 얼마나 단순할 수 있는지는 미처 몰랐던 것 같아요.

저와 함께 만들어보고 싶다면 계속 읽어보세요 :)

모델 "학습"시키기

몇 가지 메시지로 학습해봅시다. 단어 간의 연결 관계를 집계하기만 하면 됩니다. 메시지 하나씩 해봅시다.

1. "i think we should probably ship it"
2. "i think that sounds good"
3. "i think we should probably wait"
4. "we should check with the team"
5. "that sounds good to me"

전이 행렬

위에서 메시지를 추가하면 행렬이 만들어집니다.

단어 간 연결 관계를 완성한 이 지도를 빈도 테이블이라고 합니다. 각 행을 정규화하면 다음에 올 단어의 확률 분포를 얻을 수 있습니다.

지금까지의 내용을 바탕으로 다음 단어를 고르는 행위를 샘플링이라고 합니다. Claude 같은 현대 언어 모델에서도 이 과정에 동일한 용어를 사용합니다.

샘플링 해보기

5개의 문자를 기반으로 한 동일한 행렬을 사용하여, 이번엔 확률을 보면서 게임을 해보세요.

i _

강조된 행이 현재 컨텍스트입니다. 계속하려면 사용 가능한 선택지에서 단어를 고르세요.

규모를 키워보기

5개의 메시지로 작은 행렬과 몇 가지 예측을 얻었습니다. 데이터가 더 많아지면 어떻게 될까요?

5 메시지
17 고유 단어
13 컨텍스트
24 전이
2 최대 선택지

다음 이후:

ship 50% wait 50%

조절 노브

샘플링할 때 확률을 볼 수 있었지만, 어떤 단어가 "맞는 것 같은" 느낌인지 직감도 사용했을 거예요.

직감 대신 코드로 그 선택을 해야 한다면, 어떤 규칙을 넣어야 가장 좋은 결과를 만들 수 있을까요?

연결고리

방금 사용한 샘플링 전략은 개발자들이 Claude에 전달하는 샘플링 제약 조건과 거의 동일합니다. LLM에서는 몇 가지가 다릅니다.

마르코프 체인
LLM
1 컨텍스트 읽기
마지막 단어: "think"
1 컨텍스트 읽기
지금까지의 전체 대화
2 분포 계산
테이블에서 한 행 조회
2 분포 계산
수십억 개의 파라미터를 통한 순전파 — 어텐션, 임베딩, 피드포워드 레이어, 잔차 연결, 레이어 정규화...
3 다음 토큰 샘플링
we 32% the 16% i 11%
3 다음 토큰 샘플링 동일한 과정
we 32% the 16% i 11%

마르코프 테이블 조회는 매우 단순하고 설명하기 쉬운 연산입니다. 신경망의 순전파는 훨씬 복잡합니다. 하지만 어느 경우든 출력은 동일합니다: 다음에 올 가능성 있는 단어 또는 토큰의 확률 분포입니다.

샘플링은 동일하지만, 학습은 근본적으로 다릅니다. 앞서의 지수적 한계(어휘 N 행)는 적용되지 않습니다. LLM은 단순히 단어를 집계하는 설명 가능성을 포기하는 대신, 훨씬 더 많은 컨텍스트와 훨씬 더 뛰어난 능력을 얻습니다.

100년 된 기술

"이게 진짜 기술인가요?" 좋은 질문입니다, 독자 여러분.

마르코프는 이 아이디어를 1906년에 발표했습니다. 한 세기가 지난 2010년에는 이와 같은 n-그램 모델이 휴대폰의 다음 단어 예측(SwiftKey, 이후 Apple의 QuickType)을 구동하고 있었습니다. 2015년경부터 신경망 — 처음에는 RNN, 그리고 2017년에는 트랜스포머 — 이 테이블 조회 방식을 학습된 함수로 대체하기 시작했고, 나머지는... 글쎄요, 지금 우리가 하고 있는 것이죠.